package com.dlc.shop.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dlc.shop.bean.dto.flow.SupplierProdDTO;
import com.dlc.shop.bean.model.SupplierProd;
import com.dlc.shop.bean.vo.SupplierProdVO;
import com.dlc.shop.common.util.PageAdapter;
import com.dlc.shop.common.util.PageParam;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author Citrus
 * @date 2021-09-07 10:12:32
 */
public interface SupplierProdMapper extends BaseMapper<SupplierProd> {

    /**
     * 搜索所有商品
     *
     * @param supplierId
     * @return
     */
    List<SupplierProdVO> listSupplierProd(@Param("supplierId") Long supplierId);

    /**
     * 导出商品
     *
     * @param supplierId
     * @return
     */
    List<SupplierProdVO> getByParam(@Param("supplierId") Long supplierId);

    /**
     * 根据供应商id查找已有的商品
     *
     * @param supplierId
     * @return 编码列表
     */
    List<String> getPartyCodeList(@Param("supplierId") Long supplierId);

    /**
     * 根据商品id删除供应商商品
     *
     * @param prodId
     */
    void deleteByProdId(@Param("prodId") Long prodId);

    /**
     * 根据商品id查询供应商
     *
     * @param prodId
     * @return
     */
    List<Long> listSupplierIdByProdId(@Param("prodId") Long prodId);

    /**
     * 根据skuIds查询供应商
     *
     * @param skuIds
     * @return
     */
    List<Long> listSupplierIdBySkuIds(@Param("skuIds") List<Long> skuIds);

    /**
     * 分页获取供应商商品（不含sku）
     *
     * @param pageParam 分页参数
     * @param supplierProdDTO 供应商商品DTO
     * @return 供应商商品VO分页
     */
    Page<SupplierProdVO> pageSupplierProd(PageParam<SupplierProdVO> pageParam,
                                          @Param("supplierProdDTO") SupplierProdDTO supplierProdDTO);

    /**
     * 获取供应商商品列表（含sku）
     * @param supplierProdDTO 供应商商品DTO
     * @return 供应商商品VO列表
     */
    List<SupplierProdVO> supplierProdList(@Param("supplierProdDTO") SupplierProdDTO supplierProdDTO);

    /**
     * 供应商商品总数
     *
     * @param supplierId
     * @param partyCode
     * @return
     */
    long supplierProdTotal(@Param("supplierId") Long supplierId, @Param("partyCode") String partyCode);

    /**
     * 根据skuId删除商品
     *
     * @param prodId
     * @param skuIds
     */
    void deleteBySkuIds(@Param("prodId") Long prodId, @Param("skuIds") List<Long> skuIds);

    /**
     * 自采供应商商品总数
     * @param supplierProdDTO 供应商商品DTO
     * @return
     */
    long defaultSupplierProdTotal(@Param("supplierProdDTO") SupplierProdDTO supplierProdDTO);

    /**
     * 获取默认供应商商品信息
     *
     * @param pageAdapter
     * @param supplierProdDTO
     * @return
     */
    List<SupplierProdVO> defaultSupplierProdPage(@Param("page") PageAdapter pageAdapter,
                                                 @Param("supplierProdDTO") SupplierProdDTO supplierProdDTO);

    /**
     * 根据商品编码获取供应商商品信息
     *
     * @param partyCodeList
     * @return
     */
    List<SupplierProdVO> listSupplierProdByPartyCodeList(@Param("partyCodeList") List<String> partyCodeList);
}
